home *** CD-ROM | disk | FTP | other *** search
/ NeXT Enterprise Objects Framework 1.1 / NeXT Enterprise Objects Framework 1.1.iso / NextDeveloper / Examples / EnterpriseObjects / QueryByExample / QBEPalette / SortOrderSetter.m < prev    next >
Encoding:
Text File  |  1995-01-25  |  3.3 KB  |  113 lines

  1. // SortOrderSetter.m
  2.  
  3. #import <eointerface/eointerface.h>
  4. #import "SortOrderSetter.h"
  5. #import "TableMagic.h"
  6.  
  7. @implementation SortOrderSetter
  8. - (NSArray *)orderingArrayForEntity:(EOEntity *)entity keys:(NSArray *)keys
  9.                  ordering:(EOOrdering)ordering
  10. {
  11.     int count, i;
  12.     NSMutableArray *orderarray;
  13.     
  14.     count = [keys count];
  15.     orderarray = [NSMutableArray arrayWithCapacity:count];
  16.     
  17.     for(i=0; i<count; i++) {
  18.         EOAttribute *attr = [entity attributeNamed:[keys objectAtIndex:i]];
  19.         if (attr)
  20.             [orderarray addObject: [EOAttributeOrdering attributeOrderingWithAttribute:attr
  21.         ordering:ordering]];
  22.     }
  23.     return orderarray;
  24. }
  25.  
  26. - applyOrderingToDataSourceAndFetch:(EOOrdering)ordering
  27. {
  28.     id tableView = [NXTableView keyTableView];
  29.     EOController *controller = [tableView eoController];
  30.     id dataSource = [controller dataSource];
  31.     if (controller && [dataSource respondsToSelector:@selector(setFetchOrder:)]) {
  32.         NSArray *keys = [tableView associationKeysForSelectedColumns];
  33.         if (!keys) // if none selected, sort by first
  34.             keys = [NSArray arrayWithObject:[tableView associationKeyForColumn:0]];
  35.         [dataSource setFetchOrder:[self orderingArrayForEntity:[dataSource entity] keys:keys ordering:ordering]];
  36.  
  37.         // nil out the fetch order on the controller (since it will override this one)
  38.         [controller setSortOrdering:nil];
  39.         
  40.         [controller fetch:nil];
  41.         return self;
  42.     }
  43.     
  44.     NXBeep();
  45.     return nil;
  46. }
  47.  
  48. - sortDataSourceAscending:sender
  49. {
  50.     return [self applyOrderingToDataSourceAndFetch:EOAscendingOrder];
  51. }
  52.  
  53. - sortDataSourceDescending:sender
  54. {
  55.     return [self applyOrderingToDataSourceAndFetch:EODescendingOrder];
  56. }
  57.  
  58. - (NSArray *)keyOrderingForKeys:(NSArray *)keys ordering:(NSComparisonResult)ordering
  59. {
  60.     int i, count = [keys count];
  61.     NSMutableArray *result = [NSMutableArray arrayWithCapacity:count];
  62.     for(i=0; i<count; i++) {
  63.         [result addObject:[EOKeySortOrdering keyOrderingWithKey:[keys objectAtIndex:i] ordering:ordering]];
  64.     }
  65.     return result;
  66. }
  67.  
  68. - applyOrderingToControllerAndFetch:(NSComparisonResult)ordering
  69. {
  70.     id tableView = [NXTableView keyTableView];
  71.     EOController *controller = [tableView eoController];
  72.     if (controller) {
  73.         NSArray *keys = [tableView associationKeysForSelectedColumns];
  74.         if (!keys) // if none selected, sort by first
  75.             keys = [NSArray arrayWithObject:[tableView associationKeyForColumn:0]];
  76.         [controller setSortOrdering:[self keyOrderingForKeys:keys ordering:ordering]];
  77.         [controller resort];
  78.  
  79.         if ([[controller dataSource] respondsToSelector:@selector(setFetchOrder:)]) {
  80.             // unset the fetch order on the dataSource
  81.             [(EODatabaseDataSource *)[controller dataSource] setFetchOrder:nil];
  82.         }
  83.         return self;
  84.     }
  85.  
  86.     NXBeep();
  87.     return nil;
  88.     
  89. }
  90.  
  91. - sortControllerAscending:sender
  92. {
  93.     return [self applyOrderingToControllerAndFetch:NSOrderedAscending];
  94. }
  95.  
  96. - sortControllerDescending:sender
  97. {
  98.     return [self applyOrderingToControllerAndFetch:NSOrderedDescending];
  99. }
  100.  
  101.  
  102. // switch old style methods to use controller sorting
  103. - setOrderAscending:sender
  104. {
  105.     return [self sortControllerAscending:sender];
  106. }
  107.  
  108. - setOrderDescending:sender
  109. {
  110.     return [self sortControllerDescending:sender];
  111. }
  112. @end
  113.